package com.zxl.designpattern.behavioral.memento;

/**
 * 文本编辑器类
 * 作为原发器，创建和恢复备忘录
 */
public class TextEditor {

    // 文本编辑器（notepad）新建的文本文件
    private MyText myText;
    
    /**
     * 构造函数，初始化文本内容
     * @param content 初始文本内容
     */
    public TextEditor(String content) {
        myText = new MyText(content);
    }
    
    /**
     * 添加文本
     * @param text 要添加的文本
     */
    public void append(String text) {
        // 不要纠结这里不用StringBuilder，这只是示例代码
        myText.setContent(myText.getContent() + text);
    }

    /**
     * 获取当前文本内容
     * @return 当前文本内容
     */
    public String getContent() {
        return myText.getContent();
    }

    /**
     * 创建备忘录，保存当前状态
     * @return 包含当前状态的备忘录
     */
    public IText createMemento() {
        return new TextMemento(myText.getContent());
    }
    
    /**
     * 从备忘录恢复状态
     * @param iText 包含要恢复状态的备忘录
     */
    public void restoreFromMemento(IText iText) {
        myText.setContent(((TextMemento) iText).getSavedContent());
    }

    /**
     * 备忘录类
     * 存储文本编辑器的状态
     */
    private static class TextMemento extends IText {

        // 保存的内容
        private final String savedContent;

        public TextMemento(String content) {
            this.savedContent = content;
        }

        public String getSavedContent() {
            return savedContent;
        }
    }
}    